package createtype.FactoryMethod;

import java.util.function.Supplier;

/**
 * Created by LYJ on 2016/10/18.
 * 详细链接： Builder（建造者）http://blog.csdn.net/u013256816/article/details/50978024
 *
 */
public class MainTest {
    public static void main(String... args) {
        IFactory factoryA=new ConcretaFactoryA();
        IProduct product=factoryA.produce();
        product.method();

        //lambda表达式可以对工厂方法进行简化
        //Supplier<T>: 无参函数返回T类型
        Supplier<IProduct> productASupplier= ProdductA::new;
        IProduct prodduct=productASupplier.get();
        prodduct.method();


    }
}
/*
工厂方法模式和简单工厂模式在定义上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,
而不像简单工厂模式, 把核心放在一个实类上。工厂方法模式可以允许很多实的工厂类从抽象工厂类继承下来,
从而可以在实际上成为多个简单工厂模式的综合,从而推广了简单工厂模式。
工厂方法相比于简单工厂模式的优点是增加一个产品，只需要增加一个具体工厂类和具体产品类，
没有修改原先的工厂类，符合开闭原则。缺点是客户端的代码会需要修改（简单工厂模式的客户端不需要修改），
随着产品的继续增加，所要实现的类的个数也会随之增大。
 */
